/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import dao.ArretCaisseDAO;
import dao.KitDAO;
import dao.MontantCaisseDAO;
import dao.VenteDAO;
import entity.ArretCaisse;
import entity.MontantCaisse;
import entity.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

@ManagedBean(name = "caisseBean")
@SessionScoped
public class CaisseBean {

    private MontantCaisseDAO caisseDAO = new MontantCaisseDAO();
    VenteDAO venteDAO = new VenteDAO();
    KitDAO kitDAO = new KitDAO();
    List<Kit> kits;
    private MontantCaisse caisse;
    FacesContext context = FacesContext.getCurrentInstance();
    guichetBean bean = (guichetBean) context.getApplication().evaluateExpressionGet(context, "#{guichetBean}", guichetBean.class);
    private ArretCaisseDAO arretCaisseDAO = new ArretCaisseDAO();
    List<Vente> ventes;
    int totalbillet = 0;
    double totPay = 0;
    int totalbilletKit = 0;
    double totPayKit = 0;

    public int getTotalbilletKit() {
         totalbilletKit = 0;
        for (int i = 0; i < getKits().size(); i++) {
            totalbilletKit += getKits().get(i).getNombre();

        }
        
        return totalbilletKit;
    }

    public void setTotalbilletKit(int totalbilletKit) {
        this.totalbilletKit = totalbilletKit;
    }

    public double getTotPayKit() 
    {
        totPayKit = 0;
        for (int i = 0; i < getKits().size(); i++) {
            totPayKit += getKits().get(i).getPrixAchat();

        }
        return totPayKit;
    }

    public void setTotPayKit(double totPayKit) {
        this.totPayKit = totPayKit;
    }

    
    
    public List<Kit> getKits() {
        return kitDAO.findByGuichetAndLast(seleMontantCaisse);
    }

    public void setKits(List<Kit> kits) {
        this.kits = kits;
    }

    public int getTotalbillet() {
        totalbillet = 0;
        for (int i = 0; i < getVentes().size(); i++) {
            totalbillet += getVentes().get(i).getNombre();

        }
        return totalbillet;
    }

    public void setTotalbillet(int totalbillet) {
        this.totalbillet = totalbillet;
    }

    public double getTotPay() {
        totPay = 0;
        for (int i = 0; i < getVentes().size(); i++) {
            totPay += getVentes().get(i).getPrixAchat();

        }
        return totPay;
    }

    public void setTotPay(double totPay) {
        this.totPay = totPay;
    }

    public List<Vente> getVentes() {
        return venteDAO.findByLastAndGuichet(seleMontantCaisse);
    }

    public void setVentes(List<Vente> ventes) {
        this.ventes = ventes;
    }

    public CaisseBean() {
    }

    public void redirect() throws IOException {
        if (bean.getUser() == null) {
            System.out.println("User is null");

            ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();

            extContext.redirect("login_1.xhtml?faces-redirect=true");

        }
    }

    public MontantCaisse getCaisse() {
        if (bean.getUser() != null) {
            return (MontantCaisse) caisseDAO.findByProperty("guichet", bean.getUser()).get(0);
        }
        MontantCaisse caisse = new MontantCaisse();
        caisse.setMontant(999999999);
        return caisse;
    }

    public void setCaisse(MontantCaisse caisse) {
        this.caisse = caisse;
    }

    public String redirect(MontantCaisse m) {
        selectedMontantCaisse = m;
        System.out.println("id" + m.getId());
        System.out.println("id" + selectedMontantCaisse.getId());
        arrets = arretCaisseDAO.findByMontant(selectedMontantCaisse.getId());
        return "caisseArretHisto.xhtml?faces-redirect=true";
    }
    private MontantCaisse selectedMontantCaisse;

    public MontantCaisse getSelectedMontantCaisse() {
        return selectedMontantCaisse;
    }

    public void setSelectedMontantCaisse(MontantCaisse selectedMontantCaisse) {
        this.selectedMontantCaisse = selectedMontantCaisse;
    }
    private List<ArretCaisse> arrets;

    public List<ArretCaisse> getArrets() {

        return arrets;
    }

    public void setArrets(List<ArretCaisse> arrets) {
        this.arrets = arrets;
    }
    MontantCaisse seleMontantCaisse;

    public MontantCaisse getSeleMontantCaisse() {
        return seleMontantCaisse;
    }

    public void setSeleMontantCaisse(MontantCaisse seleMontantCaisse) {
        this.seleMontantCaisse = seleMontantCaisse;
    }

    public void arretCaisse() {
        MontantCaisse montantCaisse =seleMontantCaisse;
        ArretCaisse arretCaisse = new ArretCaisse();
        caisseDAO.beginTransaction();
        arretCaisse.setMontantCaisse(montantCaisse);
        arretCaisse.setDateArret(new Date());
        arretCaisse.setHeureArret(new Date());
        arretCaisse.setMontant(montantCaisse.getMontant());
        montantCaisse.setMontant(0);
        if(getVentes().size()>1)
        montantCaisse.setLast(getVentes().get(0).getId());
         if(getKits().size()>1)
         montantCaisse.setLast2(getKits().get(0).getId());
        arretCaisseDAO.save(arretCaisse);
        caisseDAO.merge(montantCaisse);
        caisseDAO.commit();
         ventes=new ArrayList<Vente>();
          kits=new ArrayList<Kit>();
          totPay=totPayKit=totalbillet=totalbilletKit=0;
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Arret de caisse éffectué", ""));
    }
}
